home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / aminet / mus / play / multiplsr.lha / soundmonplay.asm < prev    next >
Assembly Source File  |  1992-09-14  |  13KB  |  694 lines

  1. * MultiPlayer
  2. * Copyright (C) 1992 Bryan Ford
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation; either version 2 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program; if not, write to the Free Software
  16. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17. *
  18. * I (the author of MultiPlayer) can be contacted on the Internet at
  19. * "bryan.ford@m.cc.utah.edu".  See "Player.doc" for other addresses.
  20. *
  21. * Note:  This playroutine was not originally written by me.  In general
  22. * these playroutines are public domain, so I am bringing the versions
  23. * modified for MultiPlayer under the General Public License.  In the
  24. * few cases of already-copyrighted playroutines, the above copyright
  25. * notice applies only to the parts of the file written by me.
  26. *
  27. * $Id: soundmonplay.asm,v 4.2 92/06/21 11:13:54 BAF Exp Locker: BAF $
  28. *
  29.  
  30.     include "player.i"
  31.  
  32.     code    text
  33.  
  34.     xref    ntgetsongname,modmem,dmawait
  35.  
  36.     xdef    soundmonstart
  37.  
  38. soundmonstart
  39.     plstartret 9$
  40.  
  41.         cnop    0,4
  42.     dc.l    gmod_Hook
  43. 9$    gmodbra backup                  ; InitMusic
  44.     gmodbra    BS_INIT            ; StartMusic
  45.     gmodnop
  46.     gmodnop
  47.     gmodnop
  48.     gmodq    1               ; ContinueMusic
  49.     gmodnop
  50.     gmodnop
  51.     gmodnop
  52.     gmodnop
  53.     gmodnop
  54.     gmodnop
  55.     gmodnop
  56.     gmodbra    ntgetsongname        ; GetSongName
  57.     gmodnop
  58.     gmodq    -1            ; GetFrequency
  59.     gmodbra    BS_Music        ; TimerTick
  60.     lea    name(pc),a0        ; GetMakerName
  61.     move.l    a0,d0
  62.     rts
  63.  
  64. * Yes, that's right - I'm too lazy to go in and actually figure out how
  65. * to reset the song pointers, so I'm just backing up the whole works...
  66. backup
  67.         move.b  bakflg(pc),d0
  68.         bne     \out
  69.         lea     bakstart(pc),a0
  70.         lea     bakbuf,a1
  71.         move.w  #(bakend-bakstart)/4-1,d0
  72. \loop
  73.         move.l  (a0)+,(a1)+
  74.         dbra    d0,\loop
  75.         st.b    bakflg
  76. \out
  77.         moveq   #0,d0
  78.         rts
  79.  
  80. ******************************************
  81. **    SOUNDMONITOR V2.0 PLAYROUTINE    **
  82. ******************************************
  83.  
  84. BS_INIT:
  85.         lea     bakstart(pc),a0
  86.         lea     bakbuf,a1
  87.         move.w  #(bakend-bakstart)/4-1,d0
  88. \loop
  89.         move.l  (a1)+,(a0)+
  90.         dbra    d0,\loop
  91.  
  92.     move.l    d2,-(sp)
  93.     lea    BS_D17,a0
  94.     move.l    modmem,a1
  95. ;    lea    BS_DATA,a1
  96.     clr.b    BS_D12
  97.     cmpi.w    #$562e,$001a(a1)
  98.     bne.w    BS_int1
  99.     cmpi.b    #$32,$001c(a1)
  100.     bne.w    BS_int1
  101.     move.b    $001d(a1),BS_D12
  102. BS_int1: move.l    #$00000200,d0
  103.     move.w    $001e(a1),d1
  104.     move.l    #$00000001,d2
  105.     mulu    #$0004,d1
  106.     subq.w    #$1,d1
  107. BS_int2: cmp.w    $00(a1,d0.l),d2
  108.     bge.w    BS_int3
  109.     move.w    $00(a1,d0.l),d2
  110. BS_int3: addq.l    #$4,d0
  111.     dbf    d1,BS_int2
  112.     move.w    $001e(a1),d1
  113.     mulu    #$0010,d1
  114.     move.l    #$00000200,d0
  115.     mulu    #$0030,d2
  116.     add.l    d2,d0
  117.     add.l    d1,d0
  118.     move.l    modmem,d1
  119.     add.l    d1,d0
  120. ;    addi.l    #BS_DATA,d0
  121.     move.l    d0,BS_D14
  122.     clr.l    d1
  123.     move.b    BS_D12,d1
  124.     lsl.l    #$6,d1
  125.     add.l    d1,d0
  126.     move.l    #$0000000e,d1
  127.     adda.l    #$00000020,a1
  128. BS_int4: move.l    d0,(a0)+
  129.     cmpi.b    #-$01,(a1)
  130.     beq.w    BS_int5
  131.     move.w    $0018(a1),d2
  132.     mulu    #$0002,d2
  133.     add.l    d2,d0
  134. BS_int5: adda.l    #$00000020,a1
  135.     dbf    d1,BS_int4
  136.     move.l    (sp)+,d2
  137.     rts
  138.  
  139. BS_Music: dc.b    $48,$e7,$ff,$fe
  140.     bsr.s    BS_MS2
  141.     movem.l    (a7)+,d0-d7/a0-a6
  142.     moveq    #$00,d0
  143.     rts
  144.  
  145. BS_MS2:    bsr.w    BS_MX7
  146.     subq.b    #$1,BS_D10
  147.     move.l    #$00000003,d0
  148.     lea    BS_D3,a0
  149.     move.l    #$00dff0a0,a1
  150. BS_MS3:    move.b    $000c(a0),d4
  151.     ext.w    d4
  152.     add.w    d4,(a0)
  153.     tst.b    $001e(a0)
  154.     bne.w    BS_MS4
  155.     move.w    (a0),$0006(a1)
  156. BS_MS4:    move.l    $0004(a0),(a1)
  157.     move.w    $0008(a0),$0004(a1)
  158.     tst.b    $000b(a0)
  159.     bne.w    BS_MS5
  160.     tst.b    $000d(a0)
  161.     beq.w    BS_MS8
  162. BS_MS5:    tst.b    BS_D10
  163.     bne.w    BS_MS6
  164.     move.b    $000b(a0),d3
  165.     move.b    $000d(a0),d4
  166.     andi.w    #$00f0,d4
  167.     andi.w    #$00f0,d3
  168.     lsr.w    #$4,d3
  169.     lsr.w    #$4,d4
  170.     add.w    d3,d4
  171.     add.b    $000a(a0),d4
  172.     bsr.w    BS_MX6
  173.     bra.w    BS_MS8
  174.  
  175. BS_MS6:    cmpi.b    #$01,BS_D10
  176.     bne.w    BS_MS7
  177.     move.b    $000b(a0),d3
  178.     move.b    $000d(a0),d4
  179.     andi.w    #$000f,d3
  180.     andi.w    #$000f,d4
  181.     add.w    d3,d4
  182.     add.b    $000a(a0),d4
  183.     bsr.w    BS_MX6
  184.     bra.w    BS_MS8
  185.  
  186. BS_MS7:    move.b    $000a(a0),d4
  187.     bsr.w    BS_MX6
  188. BS_MS8:    lea    $0010(a1),a1
  189.     lea    $0020(a0),a0
  190.     dbf    d0,BS_MS3
  191.     tst.b    BS_D10
  192.     bne.w    BS_MS9
  193.     move.b    #$03,BS_D10
  194. BS_MS9:    subq.b    #$1,BS_D8
  195.     beq.w    BS_MT1
  196.     rts
  197.  
  198. BS_MT1:    move.b    BS_D9,BS_D8
  199.     bsr.s    BS_MU1
  200.     move.w    BS_D13,$00dff096
  201.     jsr     dmawait
  202.     move.l    #$00000003,d0
  203.     move.l    #$00dff0a0,a1
  204.     move.w    #$0001,d1
  205.     lea    BS_D3,a2
  206.     lea    BS_D15,a5
  207. BS_MT3:    btst    #$07,(a2)
  208.     beq.w    BS_MT4
  209.     bsr.w    BS_MW3
  210. BS_MT4:    asl.w    #$1,d1
  211.     lea    $0010(a1),a1
  212.     lea    $0020(a2),a2
  213.     lea    $0024(a5),a5
  214.     dbf    d0,BS_MT3
  215.     rts
  216.  
  217. BS_MU1:    clr.w    BS_D13
  218.     move.l    modmem,a0
  219. ;    lea    BS_DATA,a0
  220.     move.l    #$00dff0a0,a3
  221.     move.l    #$00000003,d0
  222.     move.w    #$0001,d7
  223.     lea    BS_D3,a1
  224. BS_MU2:    clr.l    d1
  225.     move.w    BS_D4,d1
  226.     lsl.w    #$4,d1
  227.     move.l    d0,d2
  228.     lsl.l    #$2,d2
  229.     add.l    d2,d1
  230.     addi.l    #$00000200,d1
  231.     move.w    $00(a0,d1.l),d2
  232.     move.b    $02(a0,d1.l),BS_D6
  233.     move.b    $03(a0,d1.l),BS_D7
  234.     subq.w    #$1,d2
  235.     mulu    #$0030,d2
  236.     clr.l    d3
  237.     move.w    $001e(a0),d3
  238.     lsl.w    #$4,d3
  239.     add.l    d2,d3
  240.     move.l    #$00000200,d4
  241.     move.b    BS_D5,d4
  242.     add.l    d3,d4
  243.     move.l    d4,a2
  244.     adda.l    a0,a2
  245.     clr.l    d3
  246.     move.b    (a2),d3
  247.     tst.b    d3
  248.     bne.w    BS_MU3
  249.     bra.w    BS_MV0
  250.  
  251. BS_MU3:    clr.w    $000c(a1)
  252.     move.b    $0001(a2),d4
  253.     andi.b    #$0f,d4
  254.     cmpi.b    #$0a,d4
  255.     bne.w    BS_MU4
  256.     move.b    $0002(a2),d4
  257.     andi.b    #-$10,d4
  258.     bne.w    BS_MU5
  259. BS_MU4:    add.b    BS_D7,d3
  260.     ext.w    d3
  261. BS_MU5:    move.b    d3,$000a(a1)
  262.     lea    BS_D16,a4
  263.     lsl.w    #$1,d3
  264.     move.w    -$02(a4,d3.w),(a1)
  265.     bset    #$07,(a1)
  266.     move.b    #-$01,$0002(a1)
  267.     clr.w    d3
  268.     move.b    $0001(a2),d3
  269.     lsr.b    #$4,d3
  270.     andi.b    #$0f,d3
  271.     tst.b    d3
  272.     bne.w    BS_MU6
  273.     move.b    $0003(a1),d3
  274. BS_MU6:    move.b    $0001(a2),d4
  275.     andi.b    #$0f,d4
  276.     cmpi.b    #$0a,d4
  277.     bne.w    BS_MU7
  278.     move.b    $0002(a2),d4
  279.     andi.b    #$0f,d4
  280.     bne.w    BS_MU8
  281. BS_MU7:    add.b    BS_D6,d3
  282. BS_MU8:    cmpi.w    #$0001,$0008(a1)
  283.     beq.w    BS_MU9
  284.     cmp.b    $0003(a1),d3
  285.     beq.w    BS_MV0
  286. BS_MU9:    move.b    d3,$0003(a1)
  287.     or.w    d7,BS_D13
  288. BS_MV0:    clr.l    d3
  289.     clr.l    d4
  290.     move.b    $0001(a2),d3
  291.     andi.b    #$0f,d3
  292.     move.b    $0002(a2),d4
  293.     cmpi.b    #$00,d3
  294.     bne.w    BS_MV1
  295.     move.b    d4,$000b(a1)
  296. BS_MV1:    cmpi.b    #$01,d3
  297.     bne.w    BS_MV2
  298.     move.w    d4,$0008(a3)
  299.     move.b    d4,$0002(a1)
  300. BS_MV2:    cmpi.b    #$02,d3
  301.     bne.w    BS_MV3
  302.     move.b    d4,BS_D8
  303.     move.b    d4,BS_D9
  304. BS_MV3:    cmpi.b    #$03,d3
  305.     bne.w    BS_MV5
  306.     tst.b    d4
  307.     bne.w    BS_MV4
  308.     bset    #$01,$00bfe001
  309.     bra.w    BS_MW1
  310.  
  311. BS_MV4:    bclr    #$01,$00bfe001
  312. BS_MV5:    cmpi.b    #$04,d3
  313.     bne.w    BS_MV6
  314.     sub.w    d4,(a1)
  315.     clr.b    $000b(a1)
  316. BS_MV6:    cmpi.b    #$05,d3
  317.     bne.w    BS_MV7
  318.     add.w    d4,(a1)
  319.     clr.b    $000b(a1)
  320. BS_MV7:    cmpi.b    #$06,d3
  321.     bne.w    BS_MV8
  322.     move.b    d4,BS_D11
  323. BS_MV8:    cmpi.b    #$07,d3
  324.     bne.w    BS_MV9
  325.     subq.b    #$1,BS_D11
  326.     beq.w    BS_MV9
  327.     move.w    d4,BS_D4
  328. BS_MV9:    cmpi.b    #$08,d3
  329.     bne.w    BS_MW0
  330.     move.b    d4,$000c(a1)
  331. BS_MW0:    cmpi.b    #$09,d3
  332.     bne.w    BS_MW1
  333.     move.b    d4,$000d(a1)
  334. BS_MW1:    lea    $0010(a3),a3
  335.     lea    $0020(a1),a1
  336.     asl.w    #$1,d7
  337.     dbf    d0,BS_MU2
  338.     addq.b    #$3,BS_D5
  339.     cmpi.b    #$30,BS_D5
  340.     bne.w    BS_MW2
  341.     move.b    #$00,BS_D5
  342.     addq.w    #$1,BS_D4
  343.     move.l    modmem,a0
  344. ;    lea    BS_DATA,a0
  345.     move.w    $001e(a0),d1
  346.     cmp.w    BS_D4,d1
  347.     bne.w    BS_MW2
  348.     move.w    #$0000,BS_D4
  349. BS_MW2:    rts
  350.  
  351. BS_MW3:    bclr    #$07,(a2)
  352.     tst.l    (a5)
  353.     beq.w    BS_MW5
  354.     clr.w    d3
  355.     move.l    (a5),a4
  356.     moveq    #$07,d7
  357. BS_MW4:    move.l    $04(a5,d3.w),(a4)+
  358.     addq.w    #$4,d3
  359.     dbf    d7,BS_MW4
  360. BS_MW5:    move.w    (a2),$0006(a1)
  361.     clr.l    d7
  362.     move.b    $0003(a2),d7
  363.     move.l    d7,d6
  364.     lsl.l    #$5,d7
  365.     move.l    modmem,a3
  366. ;    lea    BS_DATA,a3
  367.     cmpi.b    #-$01,$00(a3,d7.w)
  368.     beq.w    BS_MX0
  369.     clr.l    (a5)
  370.     clr.b    $001a(a2)
  371.     clr.w    $001e(a2)
  372.     addi.l    #$00000018,d7
  373.     lsl.l    #$2,d6
  374.     lea    BS_D17,a4
  375.     move.l    -$04(a4,d6.l),d4
  376.     beq.w    BS_MW7
  377.     move.l    d4,(a1)
  378.     move.w    $00(a3,d7.l),$0004(a1)
  379.     move.b    $0002(a2),$0009(a1)
  380.     cmpi.b    #-$01,$0002(a2)
  381.     bne.w    BS_MW6
  382.     move.w    $06(a3,d7.l),$0008(a1)
  383. BS_MW6:    move.w    $04(a3,d7.l),$0008(a2)
  384.     clr.l    d6
  385.     move.w    $02(a3,d7.l),d6
  386.     add.l    d6,d4
  387.     move.l    d4,$0004(a2)
  388.     cmpi.w    #$0001,$0008(a2)
  389.     bne.w    BS_MW8
  390. BS_MW7:    move.l    #BS_D2,$0004(a2)
  391.     bra.w    BS_MW9
  392.  
  393. BS_MW8:    move.w    $0008(a2),$0004(a1)
  394.     move.l    $0004(a2),(a1)
  395. BS_MW9:    addi.w    #-$8000,d1
  396.     move.w    d1,$00dff096
  397.     rts
  398.  
  399. BS_MX0:    move.b    #$01,$001a(a2)
  400.     clr.w    $000e(a2)
  401.     clr.w    $0010(a2)
  402.     clr.w    $0012(a2)
  403.     move.w    $16(a3,d7.w),$0014(a2)
  404.     addq.w    #$1,$0014(a2)
  405.     move.w    $0e(a3,d7.w),$0016(a2)
  406.     addq.w    #$1,$0016(a2)
  407.     move.w    #$0001,$0018(a2)
  408.     move.b    $11(a3,d7.w),$001d(a2)
  409.     move.b    $09(a3,d7.w),$001e(a2)
  410.     move.b    $04(a3,d7.w),$001f(a2)
  411.     move.b    $13(a3,d7.w),$001c(a2)
  412.     move.l    BS_D14,a4
  413.     clr.l    d3
  414.     move.b    $01(a3,d7.w),d3
  415.     lsl.l    #$6,d3
  416.     adda.l    d3,a4
  417.     move.l    a4,(a1)
  418.     move.l    a4,$0004(a2)
  419.     move.w    $02(a3,d7.w),$0004(a1)
  420.     move.w    $02(a3,d7.w),$0008(a2)
  421.     tst.b    $04(a3,d7.w)
  422.     beq.w    BS_MX2
  423.     move.l    BS_D14,a4
  424.     clr.l    d3
  425.     move.b    $05(a3,d7.w),d3
  426.     lsl.l    #$6,d3
  427.     adda.l    d3,a4
  428.     clr.w    d3
  429.     move.b    (a4),d3
  430.     addi.b    #-$80,d3
  431.     lsr.w    #$2,d3
  432.     cmpi.b    #-$01,$0002(a2)
  433.     bne.w    BS_MX1
  434.     move.b    $19(a3,d7.w),$0002(a2)
  435. BS_MX1:    clr.w    d4
  436.     move.b    $0002(a2),d4
  437.     mulu    d4,d3
  438.     lsr.w    #$6,d3
  439.     move.w    d3,$0008(a1)
  440.     bra.w    BS_MX3
  441.  
  442. BS_MX2:    move.b    $0002(a2),$0009(a1)
  443.     cmpi.b    #-$01,$0002(a2)
  444.     bne.w    BS_MX3
  445.     move.b    $19(a3,d7.w),$0009(a1)
  446. BS_MX3:    move.l    $0004(a2),a4
  447.     move.l    a4,(a5)
  448.     clr.w    d3
  449.     moveq    #$07,d4
  450. BS_MX4:    move.l    $00(a4,d3.w),$04(a5,d3.w)
  451.     addq.w    #$4,d3
  452.     dbf    d4,BS_MX4
  453.     tst.b    $11(a3,d7.w)
  454.     beq.w    BS_MW9
  455.     tst.b    $13(a3,d7.w)
  456.     beq.w    BS_MW9
  457.     clr.l    d3
  458.     move.b    $13(a3,d7.w),d3
  459.     lsr.l    #$3,d3
  460.     move.b    d3,$001c(a2)
  461.     subq.l    #$1,d3
  462. BS_MX5:    neg.b    (a4)+
  463.     dbf    d3,BS_MX5
  464.     bra.w    BS_MW9
  465.  
  466. BS_MX6:    lea    BS_D16,a4
  467.     ext.w    d4
  468.     asl.w    #$1,d4
  469.     move.w    -$02(a4,d4.w),$0006(a1)
  470.     rts
  471.  
  472. BS_MX7:    move.l    #$00000003,d0
  473.     lea    BS_D3,a2
  474.     lea    $00dff0a0,a1
  475.     move.l    modmem,a3
  476. ;    lea    BS_DATA,a3
  477.     lea    BS_D15,a5
  478. BS_MX8:    tst.b    $001a(a2)
  479.     beq.w    BS_MX9
  480.     bsr.s    BS_MY0
  481. BS_MX9:    lea    $0024(a5),a5
  482.     lea    $0020(a2),a2
  483.     lea    $0010(a1),a1
  484.     dbf    d0,BS_MX8
  485.     rts
  486.  
  487. BS_MY0:    clr.w    d7
  488.     move.b    $0003(a2),d7
  489.     lsl.w    #$5,d7
  490.     tst.b    $001f(a2)
  491.     beq.w    BS_MY1
  492.     subq.w    #$1,$0018(a2)
  493.     bne.w    BS_MY1
  494.     clr.l    d3
  495.     move.b    $08(a3,d7.w),d3
  496.     move.w    d3,$0018(a2)
  497.     move.l    BS_D14,a4
  498.     move.b    $05(a3,d7.w),d3
  499.     lsl.l    #$6,d3
  500.     adda.l    d3,a4
  501.     move.w    $0012(a2),d3
  502.     clr.w    d4
  503.     move.b    $00(a4,d3.w),d4
  504.     addi.b    #-$80,d4
  505.     lsr.w    #$2,d4
  506.     clr.w    d3
  507.     move.b    $0002(a2),d3
  508.     mulu    d3,d4
  509.     lsr.w    #$6,d4
  510.     move.w    d4,$0008(a1)
  511.     addq.w    #$1,$0012(a2)
  512.     move.w    $06(a3,d7.w),d4
  513.     cmp.w    $0012(a2),d4
  514.     bne.w    BS_MY1
  515.     clr.w    $0012(a2)
  516.     cmpi.b    #$01,$001f(a2)
  517.     bne.w    BS_MY1
  518.     clr.b    $001f(a2)
  519. BS_MY1:    tst.b    $001e(a2)
  520.     beq.w    BS_MY3
  521.     subq.w    #$1,$0016(a2)
  522.     bne.w    BS_MY3
  523.     clr.l    d3
  524.     move.b    $10(a3,d7.w),d3
  525.     move.w    d3,$0016(a2)
  526.     move.l    BS_D14,a4
  527.     move.b    $0a(a3,d7.w),d3
  528.     lsl.l    #$6,d3
  529.     adda.l    d3,a4
  530.     move.w    $0010(a2),d3
  531.     clr.l    d4
  532.     move.b    $00(a4,d3.w),d4
  533.     ext.w    d4
  534.     ext.l    d4
  535.     clr.l    d5
  536.     move.b    $0b(a3,d7.w),d5
  537.     tst.b    d5
  538.     beq.w    BS_MY2
  539.     divs    d5,d4
  540. BS_MY2:    move.w    (a2),d5
  541.     add.w    d4,d5
  542.     move.w    d5,$0006(a1)
  543.     addq.w    #$1,$0010(a2)
  544.     move.w    $0c(a3,d7.w),d3
  545.     cmp.w    $0010(a2),d3
  546.     bne.w    BS_MY3
  547.     clr.w    $0010(a2)
  548.     cmpi.b    #$01,$001e(a2)
  549.     bne.w    BS_MY3
  550.     clr.b    $001e(a2)
  551. BS_MY3:    tst.b    $001d(a2)
  552.     beq.w    BS_MY8
  553.     subq.w    #$1,$0014(a2)
  554.     bne.w    BS_MY8
  555.     tst.l    (a5)
  556.     beq.w    BS_MY8
  557.     clr.l    d3
  558.     move.b    $18(a3,d7.w),d3
  559.     move.w    d3,$0014(a2)
  560.     move.l    BS_D14,a4
  561.     move.b    $12(a3,d7.w),d3
  562.     lsl.l    #$6,d3
  563.     adda.l    d3,a4
  564.     move.w    $000e(a2),d3
  565.     clr.l    d4
  566.     move.b    $00(a4,d3.w),d4
  567.     move.l    (a5),a4
  568.     addi.b    #-$80,d4
  569.     lsr.l    #$3,d4
  570.     clr.l    d3
  571.     move.b    $001c(a2),d3
  572.     move.b    d4,$001c(a2)
  573.     adda.l    d3,a4
  574.     move.l    a5,a6
  575.     adda.l    d3,a6
  576.     addq.l    #$4,a6
  577.     cmp.b    d3,d4
  578.     beq.w    BS_MY7
  579.     bgt.w    BS_MY5
  580.     sub.l    d4,d3
  581.     subq.l    #$1,d3
  582. BS_MY4:    move.b    -(a6),d4
  583.     move.b    d4,-(a4)
  584.     dbf    d3,BS_MY4
  585.     bra.w    BS_MY7
  586.  
  587. BS_MY5:    sub.l    d3,d4
  588.     subq.l    #$1,d4
  589. BS_MY6:    move.b    (a6)+,d3
  590.     neg.b    d3
  591.     move.b    d3,(a4)+
  592.     dbf    d4,BS_MY6
  593. BS_MY7:    addq.w    #$1,$000e(a2)
  594.     move.w    $14(a3,d7.w),d3
  595.     cmp.w    $000e(a2),d3
  596.     bne.w    BS_MY8
  597.     clr.w    $000e(a2)
  598.     cmpi.b    #$01,$001d(a2)
  599.     bne.w    BS_MY8
  600.     clr.b    $001d(a2)
  601. BS_MY8:    rts
  602.  
  603.     cnop    0,4
  604. bakstart
  605.  
  606. BS_D1:    dcb.b    8,$00
  607.     dc.b    $02,$7f
  608.     dcb.b    8,$00
  609.     dc.l    BS_Music
  610. BS_D2:    dcb.b    2,$00
  611. BS_D3:    dcb.b    4,$00
  612.     dc.l    BS_D2
  613.     dc.b    $00,$01
  614.     dcb.b    26,$00
  615.     dc.l    BS_D2
  616.     dc.b    $00,$01
  617.     dcb.b    26,$00
  618.     dc.l    BS_D2
  619.     dc.b    $00,$01
  620.     dcb.b    26,$00
  621.     dc.l    BS_D2
  622.     dc.b    $00,$01
  623.     dcb.b    22,$00
  624. BS_D4:    dcb.b    2,$00
  625. BS_D5:    dcb.b    1,$00
  626. BS_D6:    dcb.b    1,$00
  627. BS_D7:    dcb.b    1,$00
  628. BS_D8:    dc.b    $01
  629. BS_D9:    dc.b    $06
  630. BS_D10:    dc.b    $01
  631. BS_D11:    dc.b    $01
  632. BS_D12:    dcb.b    1,$00
  633. BS_D13:    dcb.b    2,$00
  634. BS_D14:    dcb.b    4,$00
  635. BS_D15:    dcb.b    144,$00
  636.     dc.b    $1a,$c0,$19,$40,$17,$c0
  637.     dc.b    $16,$80,$15,$40,$14,$00
  638.     dc.b    $12,$e0,$11,$e0,$10,$e0
  639.     dc.b    $0f,$e0,$0f,$00,$0e,$20
  640.     dc.b    $0d,$60,$0c,$a0,$0b,$e0
  641.     dc.b    $0b,$40,$0a,$a0,$0a,$00
  642.     dc.b    $09,$70,$08,$f0,$08,$70
  643.     dc.b    $07,$f0,$07,$80,$07,$10
  644.     dc.b    $06,$b0,$06,$50,$05,$f0
  645.     dc.b    $05,$a0,$05,$50,$05,$00
  646.     dc.b    $04,$b8,$04,$78,$04,$38
  647.     dc.b    $03,$f8,$03,$c0,$03,$88
  648. BS_D16:    dc.b    $03,$58,$03,$28,$02,$f8
  649.     dc.b    $02,$d0,$02,$a8,$02,$80
  650.     dc.b    $02,$5c,$02,$3c,$02,$1c
  651.     dc.b    $01,$fc,$01,$e0,$01,$c4
  652.     dc.b    $01,$ac,$01,$94,$01,$7c
  653.     dc.b    $01,$68,$01,$54,$01,$40
  654.     dc.b    $01,$2e,$01,$1e,$01,$0e
  655.     dc.b    $00,$fe,$00,$f0,$00,$e2
  656.     dc.b    $00,$d6,$00,$ca,$00,$be
  657.     dc.b    $00,$b4,$00,$aa,$00,$a0
  658.     dc.b    $00,$97,$00,$8f,$00,$87
  659.     dc.b    $00,$7f,$00,$78,$00,$71
  660.     dc.b    $00,$6b,$00,$65,$00,$5f
  661.     dc.b    $00,$5a,$00,$55,$00,$50
  662.     dc.b    $00,$4c,$00,$48,$00,$44
  663.     dc.b    $00,$40,$00,$3c,$00,$39
  664. BS_D17:    dc.l    BS_DATAEND
  665.     dc.l    BS_DATAEND
  666.     dc.l    BS_DATAEND
  667.     dc.l    BS_DATAEND
  668.     dc.l    BS_DATAEND
  669.     dc.l    BS_DATAEND
  670.     dc.l    BS_DATAEND
  671.     dc.l    BS_DATAEND
  672.     dc.l    BS_DATAEND
  673.     dc.l    BS_DATAEND
  674.     dc.l    BS_DATAEND
  675.     dc.l    BS_DATAEND
  676.     dc.l    BS_DATAEND
  677.     dc.l    BS_DATAEND
  678.     dc.l    BS_DATAEND
  679. BS_DATAEND:
  680.     dc.b    $c8,$ca,$cd,$cf,$cf,$d6
  681.  
  682.     cnop    0,4
  683. bakend
  684.  
  685. name    dc.b    "SoundMonitor 2.0",0
  686.  
  687. bakflg  ds.b    1
  688.  
  689.         bss     data
  690.  
  691. bakbuf  ds.b    bakend-bakstart
  692.  
  693.     end
  694.